# 自动取款机模拟器。登陆和退出、查询余额、取钱、存钱、修改密码

# 定义一个用于存放账户信息的列表变量
userlist = [
    {"name":"张三",'account':'100001','password':'111111','balance':1000},
    {"name":"李四",'account':'100002','password':'222222','balance':2000},
    {"name":"王五",'account':'100003','password':'333333','balance':3000}]

# 定义验证银行卡号与密码匹配的函数
def check(user_name,user_password):
    '''
    验证银行卡号与密码匹配的函数
    '''
    for i in range(len(userlist)):
        if user_name == userlist[i]["account"] and user_password == userlist[i]["password"]:
            return i               #银行卡号与密码匹配则返回该用户在ATM系统内的ID值，否则返回None值

#定义用户登录成功后操作界面的函数
def interface():
    '''
    用户登录成功后操作界面的函数
    '''
    print("*****************欢迎登陆ATM，请选择********************")
    print("*         查询(1)               取款(2)               *")
    print("*         存款(3)             修改密码(4)             *")
    print("*         退出(5)                                     *")
    print("*                                                     *")

#定义用户查询信息的函数
def inquire(user_id):

    print("="*14,"账号信息","="*14,"\n")
    print("账户名:{:}\n".format(userlist[user_id]["name"]))
    print("卡  号:{:}\n".format(userlist[user_id]["account"]))
    print("余  额:{:}\n".format(userlist[user_id]["balance"]))

#定义用户取款的函数
def withdrawal(amount):
    '''
    用户取款的函数
    '''
    i = userlist[user_id]["balance"]-int(amount)
    if i>=0:
        userlist[user_id]["balance"]-=int(amount)
    else:
        print("账户余额不足\n")

#定义用户存款的函数
def deposit(amount):
    '''
    用户存款的函数
    '''
    userlist[user_id]["balance"]+=int(amount)

#定义用户修改密码的函数
def change_password(old_password,new_password1,new_password2):
    '''
    用户修改密码的函数
    '''
    if old_password == userlist[user_id]["password"]:
        if new_password1 == new_password2:
            userlist[user_id]["password"] = new_password1
            print("新密码修改成功\n")
            return 1
        else:
            print("修改密码失败，您2次输入的新密码不一致\n")
            return 2
    else:
        print("旧密码输入错误\n")
        return 0

# 用户登录界面，输入银行卡号和密码
chance = 3 #允许密码输入错误3次

user_name = input("请插入银行卡：")
while True:
    #user_name = input("请插入银行卡：")
    user_password = input("请输入密码：")

    user_id = check(user_name,user_password)       # 验证银行卡号与密码是否匹配

    if user_id != None:
        # print("登录成功\n")

        while True:
            interface()
            key_word = input("请输入操作选项：")
            print("")
            if key_word == "1":
                inquire(user_id)
                input("按任意键返回上一级目录:")
                print("")
            elif key_word == "2":
                print("="*14,"账号取款界面","="*14,"\n")
                amount = input("请输入取款金额：")
                print("")
                withdrawal(amount)
                inquire(user_id)
                input("按任意键返回上一级目录:")
                print("")
            elif key_word == "3":
                print("="*14,"账号存款界面","="*14,"\n")
                amount = input("请输入存款金额：")
                print("")
                deposit(amount)
                inquire(user_id)
                input("按任意键返回上一级目录:")
                print("")
            elif key_word == "4":
                print("="*14,"密码管理界面","="*14,"\n")

                old_password = input("请输入旧密码:")
                print("")
                new_password1 = input("请输入新密码:")
                print("")
                new_password2 = input("请确认新密码:")
                print("")
                save = change_password(old_password,new_password1,new_password2)
                #如何检测到旧密码输入有误，将直接退出
                if save == 0:
                    break
            elif key_word == "5":
                print("="*14,"欢迎下次光临","="*14,"\n")
                break
            else:
                print("="*14,"没有该选项","="*14,"\n")
    else:
        if chance > 1:
            print("用户名或密码错误，您还有",chance-1,"次机会，请重新输入\n")
            chance -= 1
        else:
            print("对不起，您输入用户名或密码错误已达3次")
            break



